Математические выражения в прототипах
Математические выражения на мнемосхемах
Логические функции
Арифметические функции
Битовые функции
Тригонометрические функции
Операторы
Специальные функции в скриптах
Некоторые параметры переменных допускают использование математических выражений с подстановкой значений одной или нескольких переменных. Например, виртуальная переменная в режиме "Выражение" или аварийные переменные (параметры Сигнал, Уставка и т.п.).
Простейшее выражение может состоять из имени наблюдаемой переменной. Имена переменных необходимо предварять символом $
.
Допустимо использование как локальных (в контексте узла) имен переменных, так проектных и глобальных. Для доступа к переменным того же узла (локальные имена) указывайте имя переменной в прототипе, например, $var1
.
Для доступа к переменным других узлов того же проекта, указывайте имя с префиксом узла, например, $N25_var1
.
Для доступа к переменным других проектов, указывайте имя с префиксом проекта и узла, например, $P3_N25_var1
.
Глобальное и проектное имя можно узнать, кликнув на переменную в интерфейсе, в списке переменных узла или в редакторе проектов на вкладке узла "Переменные".
При ошибке одной из переменных в выражении, значение выражения будет равно ошибке DRV_ERROR_UNRELIABLE_VAR
(недостоверное значение).
Так же доступны суффиксы (через два подчеркивания):
__error
- код ошибки переменной
__time
- Timestamp (в миллисекундах) последнего изменения статуса переменной
__value
- значение (позволяет всегда получать последнее достоверное значение переменной и игнорировать ошибку).
Примеры выражений
$var1
- локальное (в контексте узла) имя переменной
$P3_N25_var1
- глобальное имя переменной (префикс проекта + префикс узла + имя)
$var1+$var2
- сумма значений var1 и var2
$var1__value+$var2__value
- сумма последних достоверных значений var1 и var2 (ошибки переменных игнорируются)
if($sensor__error,$min_power,$max_power)
- функция if
проверяет код ошибки переменной sensor
и возвращает значение одной из переменных xxx_power
sqrt(pow($active_power,2)+pow($reactive_power,2))
- вычисление общей мощности
bit($status,3)
- возвращает 1, если установлен четвертый бит (бит с индексом 3) в переменной status
list($mode,0,"OFF",1,"ON",2,"AUTO")
- возвращает OFF
, если $mode == 0
; ON
, если $mode == 1
; AUTO
, если $mode == 2
$temperature/10
- возвращает значение переменной temperature, деленное на 10
На мнемосхемах практически в любые свойства контролов допускается прямая передача доступных свойств узла или переменной, а также подстановка математических выражений. При использовании математического выражения его необходимо обрамлять двойными фигурными скобками (см. примеры).
Доступные свойства узла
$node1.title
- имя узла
$node1.path
- полный путь узла
$node1.prefix
- глобальный префикс узла
$node1.params.param1
- значение параметра узла (param1 замените именем требуемого параметра)
$node1.tags.mytag
- 1 если тег установлен для узла, иначе - 0 (замените mytag именем требуемого тега)
Доступные свойства переменной
$node1.vars.var1.bit0
- значение отдельного бита (счет начинается с нулевого бита)
...
$node1.vars.var1.bit31
$node1.vars.var1
- значение, если нет ошибки; иначе - undefined
(аналогично .status)
$node1.vars.var1.status
- значение, если нет ошибки; иначе - undefined
$node1.vars.var1.value
- последнее достоверное значение, не зависимо от ошибки
$node1.vars.var1.time
- время (Timestamp c миллисекундами)
$node1.vars.var1.error
- код ошибки
$node1.vars.var1.update
- вспомогательная структура
$node1.vars.var1.global_name
- глобальное имя переменной
$node1.vars.var1.name
- локальное имя переменной
$node1.vars.var1.title
- description, если задан; иначе - name
$node1.vars.var1.description
- краткое описание переменной
$node1.vars.var1.comment
- комментарий
$node1.vars.var1.unit
- еденица измерения
$node1.vars.var1.tags.mytag
- 1 если тег установлен для переменной, иначе - 0 (замените mytag именем требуемого тега)
$node1.vars.var1.trend
- 1, если переменная пишет тренд
$node1.vars.var1.physical
- 1, если переменная физическая
$node1.vars.var1.payload
- служебный объект payload для переменных некоторых драйверов
Примеры выражений
$node1.vars.var1
- передача в контрол статуса переменной
$node1.vars.var1.unit
- передача в контрол единицы измерения переменной
$node1.vars.var1.bit3
- передача в контрол значения четвертого бита (индекс 3)
$node1.vars.var1.value
- передача в контрол последнего достоверного значения
$node1.vars.var1.tags.floor2
- передача в контрол 1 если тег floor2
задан для переменной
$node1.params.host
- передача в контрол параметра узла host
$node1.vars.var1 -> $node1.vars.var2
- чтение контролом из var1
и запись в var2
{{ $node1.vars.speed/10 }} RPM
- передача в контрол приведенного значения скорости с суффиксом RPM
dP {{ $node1.vars.press/10 }} $node1.vars.press.unit
- передача в контрол приведенного давления с префиксом и ед. измерения
{{ if($node1.vars.mode.bit3 && $node1.vars.mode.bit6,'red','blue') }}
- передача в контрол цветов по условию
if(X,Y,Z)
- если X не равен 0, возвращает Y, иначе Z
list(X,I0,V0,I1,V1,I2,V2,...,In,Vn)
- возвращает искомое значение по индексу, X - индекс искомого значения, In - индекс n-го значения, Vn - n-ое значение
abs(X)
- модуль числа Х
cbrt(X)
- кубический корень X
ceil(X)
- наименьшее целое, которое не меньше чем X
exp(X)
- число "e", возведенное в указанную степень.
floor(X)
- наименьшее целое, которое не меньше чем X
log(X)
- натуральный логарифм от X
log10(X)
- десятичный логарифм от X
pow(X,Y)
- возведение X в степень Y
round(X)
- округляет X до целого
round2(X,Y)
- округляет X до Y знаков после запятой
sqrt(X)
- квадратный корень от X
bit(X,Y)
- возвращает 1 если в X установлен бит Y
bool(X)
- возвращает 0 если X равен 0, иначе 1
double(A,B,C,D,E,F,G,H)
- конвертирует 8 байт (A,B,C,D,E,F,G,H) в число формата IEEE-754 Floating Point 64-bit (Double precision)
float(A,B,C,D)
- конвертирует 4 байта (A,B,C,D) в число формата IEEE-754 Floating Point 32-bit
hi16(X)
- возвращает старшие 8 бит 16-битного числа
hi32(X)
- возвращает старшие 16 бит 32-битного числа
lo16(X)
- возвращает младшие 8 бит 16-битного числа
lo32(X)
- возвращает младшие 16 бит 32-битного числа
acos(X)
- обратный косинус Х, радианы
acosh(X)
- обратный гиперболический косинус Х, радианы
asin(X)
- обратный синус Х, радианы
asinh(X)
- обратный гиперболический синус Х, радианы
atan(X)
- обратный тангенс Х, радианы
atanh(X)
- обратный гиперболический тангенс Х, радианы
atan2(X,Y)
- равняется atan(X/Y), за исключением того, что в atan2 аргумент Y может принимать значение 0
cos(X)
- косинус Х, радианы
cosh(X)
- гиперболический косинус Х, радианы
hypot(X,Y)
- гипотенуза при катетах X и Y
sin(X)
- синус Х, радианы
sinh(X)
- гиперболический синус Х, радианы
tan(X)
- тангенс Х, радианы
tanh(X)
- гиперболический тангенс Х, радианы
-X
- унарный минус
!X
- унарное логическое НЕ
^X
- унарное побитовое НЕ
X ** Y
- возведение X в степень Y
X * Y
- умножение X на Y
X / Y
- деление X на Y
X % Y
- остаток от деления X на Y
X + Y
- сложение X и Y
X - Y
- вычитание Y из X
X << Y
- побитовый сдвиг X на Y бит влево
X >> Y
- побитовый сдвиг X на Y бит вправо
X < Y
- 1, если X меньше Y, иначе - 0
X <= Y
- 1, если X меньше или равно Y, иначе - 0
X > Y
- 1, если X больше Y, иначе - 0
X >= Y
- 1, если X больше или равно Y, иначе - 0
X == Y
- 1, если X ревен Y, иначе - 0
X != Y
- 1, если X не равен Y, иначе - 0
X & Y
- побитовое И
X | Y
- побитовое ИЛИ
X ^ Y
- побитовое исключающее ИЛИ
X && Y
- логическое И
X || Y
- логическое ИЛИ
str(X)
- возвращает строковое представление числа X
reboot()
- перезагружает устройство